// || :或者

// 联合类型 : 将两个或者两个以上的类型 联合在一起 : 变量可以任选其中之一的类型
type IPerson = string | number;

// 任选其一
const a: IPerson = 10;

function sum(x: number | string, y: number | string): number {
  // x : number / string  y: number / string
  return Number(x) + Number(y);
}

// 数组类型 Array<类型>  类型 []

// 对象类型 : type : 更适用 多元化的类型的场景

// 专门描述对象 接口 interface : 专门描述对象类型的

// type ObjType = {}
// 1. 接口和类的写法有点像
interface ObjType {
  userName: string;
  password: string;
  sex: boolean;
}

let aObj: ObjType = {
  userName: "zhangsa",
  password: "123456",
  sex: true,
};

function getSum(p: ObjType): ObjType {
  return p;
}

//
interface IArrayObj {
  username: string;
  age?: number; // 可选类型
  typeid?: number;
}

// 对象
let arrObj: Array<IArrayObj> = [
  {
    username: "zhangsan",
    age: 20,
    typeid: 10,
  },
  {
    username: "lisi",
    age: 22,
  },
  {
    username: "wangwu",
    typeid: 30,
  },
];


